Hallo Forumsgemeinde,
ich kämpfe mit einer dynamischen Tabelle die ich aufgrund dieser Vorlage erstellt habe.
https://www.eview.com/eview/volr6.nsf/0/832B3F91849B005F852565FB00574907/$File/Dynamic%20Tables%20MJ%20978.pdf
In meinem Fall wird ein Protokoll erstellt, welches per Link dann an die Kalender einträge kopiert werden kann, aber in einer eigenen Datenbank abgelget werden.
Da ich im Vorfeld nicht sagen kann wieviel Einträge ein Meetingprotkoll hat habe ich mich für eine dynamische Tabelle entschieden, bei der die Felder nach Bedarf erstellt werden.
Zum Füllen der Felder wird eine Dialogbox aufgerufen:
@If(TopNumber="";@Return(@Command([ToolsRunMacro];"(AddFirstRow)"));@Success);
numbers := "0" : "1" : "2" : "3" : "4" : "5" : "6" : "7" : "8" : "9";
list := @Text(@TextToNumber(@Subset(numbers *+ numbers;-99)));
listofElements := @Subset(list;@Elements(TopNumber));
selections := "0. First Row" :(listofelements + ". " + TopNumber);
InsertionPoint := @Prompt([OkCancelList] :[NoSort];"Selection Box"; "Select the row number you wish your new item to appear below.";@Subset(Selections;-1);Selections);
@If(InsertionPoint = 1;@Return(@Prompt([Ok]; "Error Message"; "No value selected. Process canceled."));@Success);
ENVIRONMENT EnvIP := @Word(InsertionPoint;". ";1);
@Command([ToolsRunMacro]; "(AddRow)")
In meiner Dialogbox sind folgende Felder enthalten:
htopnumber - typ Text, hDescription - typ Text, hstatus - typ Kombinationsfeld, hresponsible - typ Name und hEnddate - typ Date
Die Werte der Dialobox werden dann in die eigentliche Tabelle geschrieben und zwar mit diesem Code
Option Public
Option Declare
Use "SharedVariables"
Dim InsertionPoint As Integer
Dim NumField As Variant
Dim DesField As Variant
Dim StatField As Variant
Dim ResField As Variant
Dim EnddField As Variant
Sub Initialize
'********************************************************************************************************
'* Created: January 5, 1998
'* Author: Betsy Thiede (Richmond Information Group) with much help from Gary Shifflett
'* Purpose: Adds information from the hidden fields to the place where user indicated.
'* Parameters: None
'* Called by:
'* Calls: GetCurrentField, ClearFields, SetTableFields
'*`Title: AddRow
'********************************************************************************************************
InsertionPoint = Cint(Trim(Session.GetEnvironmentString("EnvIP")))
Call GetCurrentFields() 'Get values of existing fields
Call ClearFields() 'Initialize hidden fields
If Workspace.DialogBox( "db_Detail", True,True, False, True, False,False, "Enter New Characteristic") Then
Call SetTableFields
End If
Call UiDoc.Reload
Call UiDoc.Refresh
End Sub
Function ExpandField(Field As Variant) As Variant
Dim NewField() As String 'Array to temporarily store the new "expanded" field.
Dim J As Integer 'Index counter for new field
Dim K As Integer 'Index counter for existing field.
Redim NewField(Ubound(field)+1)
k = 0
For j=0 To Ubound(field) + 1
If J <> InsertionPoint Then
NewField(j) = Field(k) 'transfer value from existing field to new field.
k = k + 1
Else
Newfield(j) = "" 'setting the new field's element to blank(k not incremented. J & K are now out of sync by one)
End If
Next
Expandfield = newfield
End Function
Sub SetTableFields
NumField(InsertionPoint) = Doc.hTopNumber(0)
DesField(InsertionPoint) = Doc.hDescription(0)
StatField(InsertionPoint) = Doc.hStatus (0)
ResField(InsertionPoint) = Doc.hResponsible (0)
EnddField(InsertionPoint) = Doc.hEndDate(0)
Doc.TopNumber = NumField
Doc.Description = DesField
Doc.Status = StatField
Doc.Responsible = ResField
Doc.EndDate = EnddField
End Sub
Sub GetCurrentFields
NumField = ExpandField(Doc.TopNumber)
DesField = ExpandField(Doc.Description)
StatField = ExpandField(Doc.Status)
ResField = ExpandField(Doc.Responsible)
EnddField = ExpandField(Doc.EndDate)
End Sub
In der Hauptmaske sind die Felder entsprechend vorhanden und auch identisch typisiert wie in der Dialogbox.
Soweit so gut.
Folgendes Problem: Ich erstelle mein Protokoll und lege als Bsp. zwei Zeilen an, lasse in diesem Fall aber das Feld responsible leer. Bei der dritten Zeile fällt er auf die Nase mit Suscript out of range und zwar lt. Debugger an dieser Stelle
Newfield(j) = "" 'setting the new field's element to blank(k not incremented. J & K are now out of sync by one)
Bei allen anderen Feldern kann er mit leeren Feldern umgehen, nur beim Typ Name nicht?
Stimmt was an der Declaration nicht? Steh' grad auf'm Schlauch.
Ich hoffe das ich mein Problem genau genug beschrieben habe und Euch nicht nur Code erschlagen habe, bei Fragen melden.