我正在使用ADO查询一个大表,然后将记录集放入一个String中。当我想在msgbox中格式化它时,问题就来了。我的代码如下:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
rs.Open strSQL, cn
strSQL = "SELECT Employee, Skill_Level FROM [Employee$] 'more specific SQL after this
MsgBox "Employee/Skill Level" & vbNewLine & "-------------" & vbNewLine & rs.GetString, vbInformation, "Query Results"
当我做类似的事情
dim blah As Variant
blah = rs.GetString
并设置一个断点,并在运行时将鼠标悬停在“ blah”上,我会得到类似“ LastName FirstNameMI☐5LastNameFirstName3☐”之类的信息。该消息框实际上是这样显示的:
Employee / Skill Level
----------------------
LastName FirstName MI 5
ReallyLongLastName FirstName MI 3
通常,最后看起来还可以,除非姓氏或名字更长。我的问题是,格式化我的GetString的最佳方法是什么,以便当查询结果中有很长的名字时,技能水平字段匹配起来?
感谢您的建议!
答案 0 :(得分:1)
类似的东西:
'pad the employee names with spaces
strSQL = "SELECT left(Employee + """ & String(40, "-") & """,40)" & _
" as Employee, Skill_Level FROM [Employee$]"
您可能需要修复一下SQL,但您了解了。
由于Msgbox字体是成比例的(不同字符的空间不同),所以它永远不会是完美的对齐方式。
如果要获得整齐的输出,则创建一个用户窗体,并添加带有非比例字体的标签(例如Courier),并将其用于显示。