在msgbox中格式化记录集getString

时间:2019-11-15 18:28:36

标签: excel vba

我正在使用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的最佳方法是什么,以便当查询结果中有很长的名字时,技能水平字段匹配起来?

感谢您的建议!

1 个答案:

答案 0 :(得分:1)

类似的东西:

'pad the employee names with spaces
strSQL = "SELECT left(Employee + """ & String(40, "-") & """,40)" & _
     " as Employee, Skill_Level FROM [Employee$]"

您可能需要修复一下SQL,但您了解了。

由于Msgbox字体是成比例的(不同字符的空间不同),所以它永远不会是完美的对齐方式。

如果要获得整齐的输出,则创建一个用户窗体,并添加带有非比例字体的标签(例如Courier),并将其用于显示。

相关问题