02. oktober 2001 - 10:24Der er
19 kommentarer og 2 løsninger
Type MisMatch Error 13...Haster!!
ok jeg er ved at blive lettere sindssyg her.
Jeg har 2 projekter kørende det ene er mit test projekt, hvor jeg sidder og får alt det jeg laver til at virke. Det andet projekt er mit egentlige projekt. Nu er det sådan at jeg har fået lavet en Print funktion over i mit Test projekt som printer et Datagrid ud, og den virker helt fint der. Nu har jeg så prøvet at ligge den over i mit egentlige projekt, og så får jeg en Type Mismatch fejl??? Jeg syntes snart at jeg har kontrolleret alt uden resultat...Nogen der har en ide om hvad det er der foregår??
Alle forslag er velkommende og hvis i vil se kode må i sige til..:)
Det der er mærkligt er at det virker i det ene projekt men ikke i det andet...
------kode----- Private Sub Command1_Click() Call PrintGrid(Datagrid) <<--her opstår problemet. Ved debug skriver den Datagrid =\"100001\" End Sub
------ny kode----- Sub PrintGrid(dgdSource As Datagrid, _ Optional blnUseGridFont As Boolean = True, _ Optional blnUseGridFormatting As Boolean = True)
\' Grid-related variables Dim intCol As Integer, lngRow As Long, _ intTotalCols As Integer, lngTotalRows As Long, _ sngCellWidth As Single, sngCellHeight As Single, _ sngGridWidth As Single, sngCellPadding As Single, _ strCellContents() As String
\' Printer-related variables Dim sngPositionX As Single, sngPositionY As Single, _ sngMarginLeft As Single, sngMarginRight As Single, _ sngMarginTop As Single, sngMarginBottom As Single, _ sngRealPrinterWidth As Single, sngRealPrinterHeight As Single, _ fntDefaultFont As StdFont, blnNewPage As Boolean, _ intPageNumber As Integer, strPrintDate As String, _ sngHeaderTop As Single, sngHeaderHeight As Single, _ sngTextWidth() As Single, sngTextHeight() As Single, _ sngColumnWidth() As Single
\' Data-related variables Dim objDataSource As Object, rstData As Recordset
\' Get data source (use clone for the recordset so that the DataGrid won\'t be \' affected by traversing it) Set objDataSource = dgdSource.DataSource If objDataSource Is Nothing Then Exit Sub Set rstData = objDataSource.Recordset.Clone rstData.Sort = objDataSource.Recordset.Sort
\' Get row and column count intTotalCols = dgdSource.Columns.Count lngTotalRows = rstData.RecordCount
\' Declare column arrays ReDim sngColumnWidth(intTotalCols) As Single ReDim sngTextWidth(intTotalCols) As Single ReDim sngTextHeight(intTotalCols) As Single ReDim strCellContents(intTotalCols) As String
\' Store column widths For intCol = 0 To intTotalCols - 1 If dgdSource.Columns(intCol).Visible = True And _ dgdSource.Columns(intCol).Width > 0 Then sngColumnWidth(intCol) = dgdSource.Columns(intCol).Width sngGridWidth = sngGridWidth + sngColumnWidth(intCol) End If Next intCol
\' Rescale column widths to fill the page For intCol = 0 To intTotalCols - 1 sngColumnWidth(intCol) = sngColumnWidth(intCol) * sngRealPrinterWidth / sngGridWidth Next intCol
\' Print rows rstData.MoveFirst Do Until rstData.EOF
\' Do preprocessing on the current row For intCol = 0 To intTotalCols - 1
If dgdSource.Columns(intCol).Visible = True And _ dgdSource.Columns(intCol).Width > 0 Then
\' Get cell contents strCellContents(intCol) = rstData.Fields(dgdSource.Columns(intCol).DataField) & \"\"
\' Apply formatting, if any If Len(dgdSource.Columns(intCol).DataFormat.Format) > 0 And _ Len(strCellContents(intCol)) > 0 Then _ strCellContents(intCol) = Format(rstData.Fields(dgdSource.Columns(intCol).DataField), dgdSource.Columns(intCol).DataFormat.Format)
\' Store dimensions of cell contents as printed sngTextWidth(intCol) = Printer.TextWidth(strCellContents(intCol)) sngTextHeight(intCol) = Printer.TextHeight(strCellContents(intCol))
\' Find tallest column in the current row (so we know how tall to make the \' borders) If sngTextHeight(intCol) + 2 * sngCellPadding > sngCellHeight Then _ sngCellHeight = sngTextHeight(intCol) + 2 * sngCellPadding End If Next intCol
\' If we don\'t have room at the bottom of the page for another line... If sngPositionY + 200 + sngCellHeight > sngRealPrinterHeight Then
\' Draw bottom row-separator line Printer.Line (0, sngPositionY)-(sngRealPrinterWidth, sngPositionY)
\' Reset position sngPositionX = 0 sngPositionY = 0
\' Draw top row-separator line Printer.Line (0, sngPositionY)-(sngRealPrinterWidth, sngPositionY)
\' Use datagrid header font If blnUseGridFont Then Printer.Font.Name = dgdSource.HeadFont.Name Printer.Font.Size = dgdSource.HeadFont.Size Printer.Font.Weight = dgdSource.HeadFont.Weight Printer.Font.Italic = dgdSource.HeadFont.Italic If Printer.Font.Name <> dgdSource.HeadFont.Name Then Set Printer.Font = fntDefaultFont End If
\' Print datagrid caption, if any If Len(dgdSource.Caption) > 0 Then Printer.CurrentX = (sngRealPrinterWidth - Printer.TextWidth(dgdSource.Caption)) / 2 Printer.CurrentY = sngCellPadding Printer.Print dgdSource.Caption
\' Draw row-separator line Printer.Line (0, sngPositionY)-(sngRealPrinterWidth, sngPositionY) End If
sngHeaderTop = sngPositionY
\' Print column headers For intCol = 0 To intTotalCols - 1
\' Print column headers If dgdSource.ColumnHeaders = True And _ dgdSource.HeadLines > 0 And _ dgdSource.Columns(intCol).Visible = True And _ dgdSource.Columns(intCol).Width > 0 Then
\' Set text position and print text sngHeaderHeight = Printer.TextHeight(dgdSource.Columns(intCol).Caption) + 2 * sngCellPadding Printer.CurrentX = sngPositionX + (sngColumnWidth(intCol) - Printer.TextWidth(dgdSource.Columns(intCol).Caption)) / 2 Printer.CurrentY = sngPositionY + sngCellPadding Printer.Print dgdSource.Columns(intCol).Caption
\' Update current position sngPositionX = sngPositionX + sngColumnWidth(intCol) End If Next intCol
\' Use datagrid cell font If blnUseGridFont Then Printer.Font.Name = dgdSource.Font.Name Printer.Font.Size = dgdSource.Font.Size Printer.Font.Weight = dgdSource.Font.Weight Printer.Font.Italic = dgdSource.Font.Italic If Printer.Font.Name <> dgdSource.Font.Name Then Set Printer.Font = fntDefaultFont End If
\' Draw row-separator line Printer.Line (0, sngPositionY)-(sngRealPrinterWidth, sngPositionY) End If
\' Draw row-separator line If dgdSource.RowDividerStyle <> dbgNoDividers Or _ Not blnUseGridFormatting Then _ Printer.Line (0, sngPositionY)-(sngRealPrinterWidth, sngPositionY)
\' Print cell contents for the current row For intCol = 0 To intTotalCols - 1 If dgdSource.Columns(intCol).Visible = True And _ dgdSource.Columns(intCol).Width > 0 Then
\' Get current cell dimensions sngCellWidth = sngColumnWidth(intCol)
\' Set text position and print text Select Case dgdSource.Columns(intCol).Alignment Case dbgLeft: Printer.CurrentX = sngPositionX + sngCellPadding Case dbgRight: Printer.CurrentX = sngPositionX + sngCellWidth - sngTextWidth(intCol) - sngCellPadding Case dbgCenter: Printer.CurrentX = sngPositionX + (sngCellWidth - sngTextWidth(intCol)) / 2 Case Else: Printer.CurrentX = sngPositionX + sngCellPadding End Select
Jeg sidder desværre ikke ved mit projekt i dag, men jeg har prøvet at ændre dgdSource til noget andet men det har ikke virket endnu. Jeg har dog ikke prøvet object.
Det som virkelig undre mig er at nøjagtig samme kode og opsætning virker i et andet projekt på samme maskine, så der burde jo egentlig ikke være noget galt med koden.
Det endte med at jeg blev lidt træt af det her problem. Så jeg prøvede at rykke alle mine forms, moduler osv. over i et nyt projekt og guess what det virker der..:)
Man tak for jeres indsats.
Picard og cellaneous får 50 points hver for at bruge deres kostbare tid på det her :)
Hvis jeg engang finder årsagen til problemet skal jeg nok poste den her.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.