![]() |
VBA Parameterübergabe
Hallo,
ich habe das Problem mich mit VBA-Makroprogrammierung auseinandersetzen zu müssen dazu Folgendes:
Delphi-Quellcode:
Ich übergebe meinem Klassenmodul FI den Benutzerdefinierten Datentyp filteredWorkbook, der im aktuellen Klassenmodul ABLAUF folgender Maßen definiert ist:
FI.init filteredWorkbook
Delphi-Quellcode:
Bei der Übergabe ByRef meines filteredWorkbooks wird dieses mit Daten gefüllt und verändert:
Private filteredWorkbook As TWorkbook
Delphi-Quellcode:
InitSheets kopiert den Inhalt eines ExcellWorkbooks in die benutzerdefinierten Variable MyWorkbook. In Init Sheets verändere ich myWorkbook:
Private myWorkbook As TWorkbook
... Public Sub init(config As FileConfig, ByRef aWorkbook As TWorkbook) Dim tmpWorkbook As TWorkbook Dim row As Integer Dim col As Integer tmpWorkbook = aWorkbook myWorkbook = tmpWorkbook // Hier wird die Variable verändert initSheets aWorkbook = myWorkbook row = UBound(myWorkbook.sheets(1).cells, 1) col = UBound(myWorkbook.sheets(1).cells, 2) row = UBound(aWorkbook.sheets(1).cells, 1) col = UBound(aWorkbook.sheets(1).cells, 2) End Sub
Delphi-Quellcode:
MyWorkbook wird in der Anzahl der Reihen und Spalten angepasst. Wenn ich aber nach dem Aufruf von InitSheets row und col kontrolliere sind beide unverändert auf dem vorherigen Wert...
ReDim Preserve myWorkbook.sheets(iSheet).rowHeader(rows)
ReDim Preserve myWorkbook.sheets(iSheet).ColumnHeader(cols) ReDim Preserve myWorkbook.sheets(iSheet).cells(rows, cols) Kann jemand helfen? Ich weiß nicht mehr weiter... |
Re: VBA Parameterübergabe
Hallo noch einmal,
ich habe eine Ergänzung, die das ganze einschränkt:
Delphi-Quellcode:
Ich benutze die Prozedur wie folgt:
Private Sub setCellDimension(iSheet As Integer, countRows As Integer, countColumns As Integer, ByRef myWorkbook As TWorkbook)
Dim colFilterLength As Integer Dim rowFilterLength As Integer Dim filter As String Dim rows As Integer Dim cols As Integer colFilterLength = thisConfig.getFilterlenght(thisConfig.COL__F) rowFilterLength = thisConfig.getFilterlenght(thisConfig.ROW__F) filter = thisConfig.getFilter(thisConfig.COL__F, 0) If (filter <> CStr(thisConfig.ALL__F)) Then cols = colFilterLength Else cols = countColumns End If filter = thisConfig.getFilter(thisConfig.ROW__F, 0) If (filter <> CStr(thisConfig.ALL__F)) Then rows = rowFilterLength Else rows = countRows End If // Hier wird die Größe des Arrays meines benutzerdefinierten Typs geändert ReDim myWorkbook.sheets(iSheet).cells(rows, cols) // Hier kann ich mir die Änderung ausgeben lassen, alles ok so weit // iSheet = 1 rows = UBound(myWorkbook.sheets(iSheet).cells, 1) cols = UBound(myWorkbook.sheets(iSheet).cells, 2)
Delphi-Quellcode:
In der Prozedur selbst werden die Arraydimensionen geändert. Prüfe ich nach dem Aufruf die Dimensionen, sind diese unverändert... Was mache ich falsch? Die Übergabe des Parameters ist ByRef...
...
setCellDimension i, countRows, countColumns, myWorkbook testr = UBound(myWorkbook.sheets(1).cells, 1) testc = UBound(myWorkbook.sheets(1).cells, 2) ... Ich kapiere das nicht. Kann jemand helfen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz