[AccessD] Setting Column Widths on Excel Spreadsheet
Rocky Smolin
rockysmolin2 at gmail.com
Wed Mar 22 18:38:15 CDT 2023
Tried this: objXLBook.ActiveSheet.Range("A:A").EntireColumn.ColumnWidth =
1000 but no cigar. same message: Unable to set the ColumnWidth property of
the range.
Tried this: objXLWS.Columns("A").ColumnWidth = 1000 - same message
Couple of other WAGs. No cigar.
Anybody?
MTIA
Rocky
On Wed, Mar 22, 2023 at 10:31 AM Rocky Smolin <rockysmolin2 at gmail.com>
wrote:
> Dear List(s):
>
> I have a requirement to create an Excel spreadsheet from a dataset.
> Setting the column widths is the problem.
>
> In this same app I create an empty spreadsheet (which is later imported
> into the Access app) and put in the column heading and set the widths.
> This is working well but the column widths are predefined (by me) so the
> code is pretty simple:
>
> ' Setup
> Set objXLApp = New Excel.Application
> Set objXLBook = objXLApp.Workbooks.Add
> Set objXLWS = objXLBook.Sheets(1)
>
> objXLWS.Cells(1, 2) = "CRS:"
> objXLWS.Cells(1, 3) = Me.fldCourseNumber
>
>
> ' Column Heads
>
> ' A
> objXLWS.Cells(4, 1) = "Course"
> objXLWS.Columns("A").ColumnWidth = 52
>
> ' B
> objXLWS.Cells(3, 2) = "Part"
> objXLWS.Cells(4, 2) = "No"
> objXLWS.Columns("B").ColumnWidth = 7
> .
> .
> .
> Etc. through column X.
>
> However, in the case I'm having a problem with the column widths are
> defined by the user along with being able to specify which columns they
> want to appear. This is working well for the datasheet format on the form
> showing data to be exported using this code when the form opens iterating
> through the the Fields table and setting the width:
>
> ' set column widths of fields to be displayed
>
> Set db = CurrentDb
> Set rs = db.OpenRecordset("Select * FROM tblParticipantListFields
> ORDER BY fldPLOrderNumber")
> Do While rs.EOF = False
>
> If rs!fldPLFieldVisible = False Then
>
> Forms!frmParticipantList!sfrmParticipantList(rs!fldPLFieldName).ColumnWidth
> = 1
> Else
>
> Forms!frmParticipantList!sfrmParticipantList(rs!fldPLFieldName).ColumnWidth
> = rs!fldPLFieldWidth * 1440
> End If
>
> NextField:
> rs.MoveNext
> Loop
>
> Now to the code that tries the same trick pushing the column headings out
> to the spreadsheet and setting the width of the column in the spreadsheet.
>
> ' Open Fields and Participant Tables
> Set db = CurrentDb
> Set rsPLFields = db.OpenRecordset("Select * FROM
> tblParticipantListFields")
> Set rsPLData = db.OpenRecordset(Me.txtRecordSource)
>
> ' Create XL Spreadsheet
> Set objXLApp = New Excel.Application
> Set objXLBook = objXLApp.Workbooks.Add
> objXLBook.Activate
> Set objXLWS = objXLBook.ActiveSheet
>
> ' Make Column Headings - start on row 3
> Do While rsPLFields.EOF = False
> If rsPLFields!fldPLFieldVisible = False Then GoTo GetNextField:
>
> objXLWS.Cells(3, intCol) = rsPLFields!fldPLFieldLabel
> strColumn = XLColumn
>
> objXLBook.ActiveSheet.Range(strColumn).ColumnWidth =
> rsPLFields!fldPLFieldWidth * 1440
>
> intCol = intCol + 1
>
> GetNextField:
> rsPLFields.MoveNext
> Loop
>
> The Private Function XLColumn returns the column letter correctly. In
> column 1 for example it returns A:A.
>
> Private Function XLColumn()
> If intCol <= 26 Then
> XLColumn = Chr(64 + intCol) & ":" & Chr(64 + intCol)
> Else
> XLColumn = "A" & Chr(64 + intCol - 26) & ":" & "A" & Chr(64 +
> intCol - 26)
> End If
>
> End Function
>
> Just to get this Function out of the loop I tried hard coding the first
> couple of columns ("A:A", etc.) but got the same error. So I 'think' the
> problem is not in the column returned by the function. (Can I use column
> numbers instead? That would be a nice simplification. I tried that but it
> throws the same error as the letters.)
>
> The problem is in the line:
>
> objXLBook.ActiveSheet.Range(strColumn).ColumnWidth =
> rsPLFields!fldPLFieldWidth * 1440
>
> which throws the error: Unable to set the ColumnWidth property of the
> range.
>
> I don't really grok Office Automation, but I've used it a lot - by trial
> and error and cribbing from code that works. I've tried twelve ways from
> Sunday to make this work but am stumped. But it's probably something
> obvious to someone who understands Office Automation.
>
> MTIA
>
> Rocky
>
>
>
More information about the AccessD
mailing list