Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1768to1772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofill

Autofill
01.07.2020 09:20:38
Doc
Hallo,
und hier direkt mein erster Beitrag. (Danke für das tolle Forum und die zahlreichen Funktionen).
Ich möchte aus einer Exceldatei A ein Makro in einer Datei B ausführen. Problem, Datei B sowie deren Blätter heißen immer anders. Soweit so gut.
Nun kämpfe ich damit, die Autofill-Funktion in Datei B aufzurufen:
Private Sub CommandButton2_Click()
Dim format As Range
Dim lngLast As Range
'**Dateifilter**
strFilter = "Excel-Dateien(*.csv*), *.csv*"
'**Vorbelgung Pfad**
ChDrive "D"
ChDir "D:xxx\"
'**Den im Dialogfeld gewählten Namen auslesen**
strFilename = Application.GetOpenFilename(strFilter)
'**Prüfen, ob eine gültige Datei ausgewählt wurde**
If strFilename = False Then Exit Sub
'**Gewählte Datei öffnen**
Set wb = Workbooks.Open(strFilename)
'**Textkonvertierung**
Set wb = Workbooks.Open(strFilename).Sheets(1)
wb.Columns(1).TextToColumns Destination:=wb.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=Fales, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
True
'Spalte 3 (Phrase als Zahl)
wb.Columns(3).NumberFormat = "0"
'Leerzeile oberhalb
wb.Rows("1:1").Select
Selection.Insert Shift:=xlDown
'SDScom Felder kopieren & einfügen
Workbooks("Datei A.xlsx").Worksheets("Tabelle 1").Range("A1:B95").Copy
ActiveSheet.Cells(1, 12).Select
Selection.PasteSpecial Paste:=xlPasteAll
Workbooks("Datei A.xlsx").Worksheets("Tabelle 1").Range("D2").Copy
ActiveSheet.Cells(2, 5).Select
Selection.PasteSpecial Paste:=xlValue
For Each format In Selection
format.FormulaLocal = format.Text
Next
'an dieser Stelle komme ich nicht weiter:
lngLast = Cells(Rows.Count, 1).End(xlUp).Row
Range("E2").AutoFill Destination:=Range("E2:E" & lngLast)
'Spaltenbreite anpassen
wb.Columns("A:M").EntireColumn.AutoFit
'Dialog speichern unter
Application.Dialogs(xlDialogSaveAs).Show (strFilename)
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofill
01.07.2020 09:35:13
Daniel
Hi
"Private Sub CommandButton2_Click()" lässt darauf schließen, dass der Code in einem Tabellenblattmodul steht (Modul "Tabelle1").
das hat zur folge, dass alle Zellbezüge (Cells, Range, Columns, Rows) ohne Tabellenblattangabe davor sich nicht auf das aktive Tabellenblatt beziehen, sondern immer auf das Blatt des Moduls!
wenn man in so einem Makro auf dem gerade aktiven Tabellenblatt arbeiten will, darf man nicht - wie sonst üblich - einfach nur den Zellbezug (Cells, Range) hinschreiben, sondern man muss "ActiveSheet" davorsetzen. "ActiveSheet" ist hier also nicht nur nice-to-have und optional, sondern notwendig.
Da du das in den Codezeilen drüber bereits verwendet hast, brauchst du das dort doch nur abschreiben.
Gruß Daniel
Anzeige
AW: Autofill
01.07.2020 10:11:50
Doc
Hallo Daniel,
danke soweit. Wie gesagt, VBA Laie. Werde mir dann nochmal die Theorie zu deiner Erläuterung bzgl Modul anschauen müssen.
Hab jetzt ActiveSheet ergänzt (so?) aber funktioniert leider immer noch nicht:
lngLast = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Range("E2").AutoFill Destination:=Range("E2:E" & lngLast)
AW: Autofill
01.07.2020 11:00:46
Daniel
HI
beschreibe "funktioniert nicht" bitte genauer
"funktioniert nicht" ist als Fehlerbeschreibung ungefähr so nützlich wie "dann machs anders" als Hilfe.
beachte bitte, dass das von mir gesagte für JEDES Cells, Range, Columns oder Rows gilt.
Gruß Daniel
Anzeige
AW: Autofill
01.07.2020 11:09:55
Doc
Hi,
Laufzeitfehler 91 - Objektvariable oder with-blockvariable nicht festgelegt.
Fehler tritt in dieser Zeile auf (ActiveSheet habe ich hinzugefügt, gleicher Fehler war aber vorher auch schon)
lngLast = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
AW: Autofill
01.07.2020 13:48:50
Daniel
konsequenter weise:
lngLast = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
vorausgesetzt, es ist ein Tabellenblatt aktiv.
Eigentlich müsste auch dein alter Code funktionieren, da es ja egal ist, auf welchem Blatt man die Anzahl der Zeilen auf dem Blatt ermittelt.
Probleme kann es nur in zwei Fällen geben:
- das Blatt in welchem sich der Button befindet ist kein Tabellen- sondern ein Diagrammblatt.
- das Aktive Blatt ist aus einer xls-Datei mit 2^16 Zeilen, das Blatt mit dem Button ist in einer neuen xlsm/xlsb-Mappe mit 2^20 Zeilen.
Gruß Daniel
Anzeige
AW:
01.07.2020 14:37:51
Gerd
Moin,
deklariere Variablen für die Ermittlung einer Zeilennummer wie lngLast mit
dem Variablentyp Long (also Dim ... As Long statt Dim ... As Range).
Achte darauf, dass alle Variablen deklariert sind. Dies ist hier nicht erkennbar.
Nicht benutzte Variablen solltest du entfernen.
Gruß Gerd

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige