Ich schreibe einen kleinen Teil des Codes, der durch Sie folgendermaßen vorgehen laufen:VBA Wort ungültig Qualifier Fehler Dynamische Verwendung Bereiche zu leeren Zellen ersetzen
- Finden Sie die maximale Größe des Datenblocks (was der letzte ist Zelle mit Daten in und die Koordinaten, gegeben durch LRow und LCol)
- Suche durch die Daten innerhalb einer Spalte (würde dies eine Reihe von Spalten machen) und wenn eine Zelle leer ist, dann verwenden Sie den Wert der Zelle über es.
- Erstellen Sie ein neues Blatt und benennen Sie
- Gehen Sie durch die Daten wählen Sie nur die Zeilen, die das Wort "Fatal" innerhalb der Spalte k haben, und fügen Sie diese Zeilen in das neue Blatt umbenannt.
Unten ist mein Code so weit. Kann jemand die oben erwähnten Verbesserungen implementieren und herausfinden, warum ich einen ungültigen Qualifier-Fehler bei LRow erhalte? Der Code wird aus einem Word-Dokument initiiert, um eine Excel-Tabelle zu öffnen und mit Daten in der Tabelle zu spielen.
Klicken Sie auf, um die globale Unter zu aktivieren:
Private Sub ObtainFatalCrashInfoButton_Click()
'Disable screen updating
'Application.ScreenUpdating = False
Application.Run ("OpenRawDataFile")
Application.Run ("FixData")
Application.Run ("GetData")
'Application.Run ("CloseRawDataFile")
Application.Run ("CommandButtonRemove")
'Enable screen updating
'Application.ScreenUpdating = True
End Sub
dann die folgenden subs wiederum aktiviert werden:
Sub OpenRawDataFile()
'Not sure this works....
Set appExcel = CreateObject("Excel.Application")
Dim IFAM_Index As Variant
Dim IFAM_File As Variant
IFAM_File = appExcel.GetOpenFilename("Excel files (*.xls), *.xls")
appExcel.Workbooks.Open IFAM_File
End Sub
Sub FixData. Fügt fehlende Daten hinzu, um den nächsten Teil des Prozesses zu vereinfachen
Sub FixData()
Dim i As Long
Dim LRow As Long, LCol As Long
Dim rngD As Range
'Set the range of the "Duration Working" Spreadsheet
LRow = wb.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
LCol = wb.Worksheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column
Set rngD = Range(Cells(2, 1), Cells(LRow, LCol))
For i = 1 To LRow.Rows.Count
If LRow.Cells(i, 11).Value = "" Then
LRow.Cells(i, 11).Value = LRow.Cells(i - 1, 1).Value
End If
Next
End Sub
Sub GetData(). SUb sollte die Zeilen, die die Kriterien erfüllen, in ein neues Blatt kopieren, um das Extrahieren in das gewünschte Format zu erleichtern (dieser Teil muss noch geschrieben werden).
Sub GetData()
'Create new tab to copy data to
Dim WS As Worksheet
Set WS = Sheets.Add
'assuming the data is in sheet1
Sheets("Sheet2").Select
RowCount = LRow
For jj = 1 To RowCount
'assuming the true statment is in column k
Range("k" & jj).Select
check_value = ActiveCell
If check_value = "Fatal" Or check_value = "fatal" Then
ActiveCell.EntireRow.Copy
'assuming the data is in sheet2
WS.Select
RowCount = Cells(Cells.Rows.Count, "k").End(xlUp).Row
Range("k" & RowCount + 1).Select
ActiveSheet.Paste
Sheets("Sheet2").Select
End If
Next
End Sub
Unter CopyData(). Geschrieben werden. Kopiert Daten in einem bestimmten Format in ein Wort. Irgendwelche Vorschläge irgendjemand?
Sub CopyData()
'....To be written
End Sub
Unter CloseRawDataFile. Schließt die Rohdatendatei ohne Speichern, da die Daten jetzt im gewünschten Format in Word kopiert werden sollen.
Sub CloseRawDataFile()
wb.Close SaveChanges:=False
Set wb = Nothing
End Sub
Unter CommandButtonRemove. Entfernen Sie die Befehlsschaltfläche aus dem Word-Dokument, da der Prozess nicht erneut erforderlich ist.
Letztendlich durchsucht dieser Code den Datensatz und fügt den Inhalt, der ein Kriterium erfüllt, in das Word-Dokument in einer vordefinierten Tabelle ein. Ich habe versucht, kleine Komponenten des Codes zu isolieren, um es einfacher zu machen. Daher wird in diesem Stadium nur der Code gesucht und in eine neue Tabelle eingefügt.
Jede Hilfe zu den anderen noch zu schreibenden Teilen wäre auch eine große Hilfe!
Eine Variable vom Typ Long hat keine Eigenschaft 'Rows'. Vielleicht willst du einfach 'For i = 1 To Lrow' –
^^ Noch hat es eine' Cells' Eigenschaft. Ist 'LRow.Cells' gemeint,' wb.Worksheets ("Sheet2") zu sein. Zellen? – YowE3K
^^^ oder vielleicht 'For i = 1 To LRow.Rows.Count' sollte' sein For i = 1 To rngD.Rows.Count' und 'LRow.Cells' sein sollte' rngD.Cells' – YowE3K