建activex dll工程,加入下面的文件,编译,在外接程序-〉外接程序管理器,选中[注释器]Connect.Dsr ======================== VERSION 5.00 Begin {AC0714F6-3D04-11D1-AE7D-00A0C90F26F4} Connect ClientHeight = 6090 ClientLeft = 1740 ClientTop = 1545 ClientWidth = 7320 _ExtentX = 12912 _ExtentY = 10742 _Version = 393216 Description = $"Connect.dsx":0000 DisplayName = "注释器" AppName = "Visual Basic" AppVer = "Visual Basic 98 (ver 6.0)" LoadName = "Command Line / Startup" LoadBehavior = 5 RegLocation = "HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0" CmdLineSupport = -1 'True End Attribute VB_Name = "Connect" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Public FormDisplayed As Boolean Public VBInstance As VBIDE.VBE Private mcbMenuCommandBar As Office.CommandBarControl Public WithEvents MenuHandler As CommandBarEvents Attribute MenuHandler.VB_VarHelpID = -1Private Declare Function GetComputerNameA Lib "kernel32" _ (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetUserNameA Lib "advapi32.dll" _ (ByVal lpBuffer As String, nSize As Long) As Long' ' Returns the computer's name ' Private Function GetComputerName() As String Dim UserName As String * 255 Call GetComputerNameA(UserName, 255) GetComputerName = Left$(UserName, InStr(UserName, Chr$(0)) - 1) End Function Private Function GetUserName() As String Dim UserName As String * 255 Call GetUserNameA(UserName, 255) GetUserName = Left$(UserName, InStr(UserName, Chr$(0)) - 1) End Function Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) On Error GoTo error_handler Set VBInstance = Application
Debug.Print VBInstance.FullName If ConnectMode = ext_cm_External Then ProcReMark Else Set mcbMenuCommandBar = AddToAddInCommandBar("注释器") Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar) End If
If ConnectMode = ext_cm_AfterStartup Then If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then ProcReMark End If End If
Exit Sub
error_handler:
MsgBox Err.Description
End SubPrivate Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant) On Error Resume Next mcbMenuCommandBar.Delete
If FormDisplayed Then SaveSetting App.Title, "Settings", "DisplayOnConnect", "1" FormDisplayed = False Else SaveSetting App.Title, "Settings", "DisplayOnConnect", "0" End IfEnd SubPrivate Sub IDTExtensibility_OnStartupComplete(custom() As Variant) If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then ProcReMark End If End Sub Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean) ProcReMark End SubFunction AddToAddInCommandBar(sCaption As String) As Office.CommandBarControl Dim cbMenuCommandBar As Office.CommandBarControl Dim cbMenu As Object
On Error GoTo AddToAddInCommandBarErr
Set cbMenu = VBInstance.CommandBars("Add-Ins") If cbMenu Is Nothing Then Exit Function End If
Set cbMenuCommandBar = cbMenu.Controls.Add(1) cbMenuCommandBar.Caption = sCaption
Set AddToAddInCommandBar = cbMenuCommandBar
Exit Function
AddToAddInCommandBarErr:End FunctionPrivate Sub ProcReMark()
Dim TmpCP As CodePane Dim i As Long Dim j As Long Dim iMax As Long Dim iBeginLine As Long Dim iEndLine As Long Dim iBeginCol As Long Dim iEndCol As Long Dim iFlgPro As Integer '0 nono ;1 sub ;2 fun Dim StrTmpVar As String Dim strProNm As String Dim strReturn As String Dim mStrArr() As String
ReDim mStrArr(0) Set TmpCP = VBInstance.ActiveCodePane
For i = iBeginLine To iEndLine StrTmpVar = Trim(TmpCP.CodeModule.Lines(i, 1)) If StrTmpVar <> vbNullString Then Exit For Next i If StrTmpVar = vbNullString Then GoTo WayOut
If UCase(mStrArr(i)) = "SUB" Or UCase(mStrArr(i)) = "FUNCTION" Then If UCase(mStrArr(i)) = "SUB" Then iFlgPro = 1 Else iFlgPro = 2 strReturn = mStrArr(iMax) End If j = InStr(1, mStrArr(i + 1), "(") If j <> 0 Then strProNm = Mid(mStrArr(i + 1), 1, j - 1) End If End If Next i
只是在从数据库读取数据到grid里面的时候,会发生自动合并
所以可能是数据库读取数据的时候发生了问题,我是这样读取的MSHFlexGrid1.TextMatrix(i, j) = Trim$(rs.Fields(j)) & Space(i)i=行,j=列应该怎样修改?
用属性CellAlignment可以修改当前Cell对其方式
MSHFlexGrid1.CellAlignment =flexAlignLeftCenter对齐:
方法1,
如果是左对其,空格加在后面;如果右对齐,空格加在左面,
方法2,
MSHFlexGrid1.ColAlignment(0) = flexAlignLeftCenter,整列左对其
MSHFlexGrid1.Col = 0
MSHFlexGrid1.Row = 0
MSHFlexGrid1.CellAlignment = flexAlignRightCenter,表头右对其Private Sub Form_Load()
MSHFlexGrid1.Cols = 2
MSHFlexGrid1.Rows = 3
MSHFlexGrid1.TextMatrix(0, 0) = "是一下"
MSHFlexGrid1.TextMatrix(1, 0) = "是一下"
MSHFlexGrid1.TextMatrix(2, 0) = "是一下"
MSHFlexGrid1.ColAlignment(0) = flexAlignLeftCenter
MSHFlexGrid1.Col = 0
MSHFlexGrid1.Row = 0
MSHFlexGrid1.CellAlignment = flexAlignRightCenter
End Sub
========================
VERSION 5.00
Begin {AC0714F6-3D04-11D1-AE7D-00A0C90F26F4} Connect
ClientHeight = 6090
ClientLeft = 1740
ClientTop = 1545
ClientWidth = 7320
_ExtentX = 12912
_ExtentY = 10742
_Version = 393216
Description = $"Connect.dsx":0000
DisplayName = "注释器"
AppName = "Visual Basic"
AppVer = "Visual Basic 98 (ver 6.0)"
LoadName = "Command Line / Startup"
LoadBehavior = 5
RegLocation = "HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0"
CmdLineSupport = -1 'True
End
Attribute VB_Name = "Connect"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Public FormDisplayed As Boolean
Public VBInstance As VBIDE.VBE
Private mcbMenuCommandBar As Office.CommandBarControl
Public WithEvents MenuHandler As CommandBarEvents
Attribute MenuHandler.VB_VarHelpID = -1Private Declare Function GetComputerNameA Lib "kernel32" _
(ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetUserNameA Lib "advapi32.dll" _
(ByVal lpBuffer As String, nSize As Long) As Long'
' Returns the computer's name
'
Private Function GetComputerName() As String
Dim UserName As String * 255 Call GetComputerNameA(UserName, 255)
GetComputerName = Left$(UserName, InStr(UserName, Chr$(0)) - 1)
End Function
Private Function GetUserName() As String
Dim UserName As String * 255 Call GetUserNameA(UserName, 255)
GetUserName = Left$(UserName, InStr(UserName, Chr$(0)) - 1)
End Function
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
On Error GoTo error_handler
Set VBInstance = Application
Debug.Print VBInstance.FullName If ConnectMode = ext_cm_External Then
ProcReMark
Else
Set mcbMenuCommandBar = AddToAddInCommandBar("注释器")
Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar)
End If
If ConnectMode = ext_cm_AfterStartup Then
If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
ProcReMark
End If
End If
Exit Sub
error_handler:
MsgBox Err.Description
End SubPrivate Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
On Error Resume Next
mcbMenuCommandBar.Delete
If FormDisplayed Then
SaveSetting App.Title, "Settings", "DisplayOnConnect", "1"
FormDisplayed = False
Else
SaveSetting App.Title, "Settings", "DisplayOnConnect", "0"
End IfEnd SubPrivate Sub IDTExtensibility_OnStartupComplete(custom() As Variant)
If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
ProcReMark
End If
End Sub
Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
ProcReMark
End SubFunction AddToAddInCommandBar(sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl
Dim cbMenu As Object
On Error GoTo AddToAddInCommandBarErr
Set cbMenu = VBInstance.CommandBars("Add-Ins")
If cbMenu Is Nothing Then
Exit Function
End If
Set cbMenuCommandBar = cbMenu.Controls.Add(1) cbMenuCommandBar.Caption = sCaption
Set AddToAddInCommandBar = cbMenuCommandBar
Exit Function
AddToAddInCommandBarErr:End FunctionPrivate Sub ProcReMark()
Dim TmpCP As CodePane
Dim i As Long
Dim j As Long
Dim iMax As Long
Dim iBeginLine As Long
Dim iEndLine As Long
Dim iBeginCol As Long
Dim iEndCol As Long
Dim iFlgPro As Integer '0 nono ;1 sub ;2 fun
Dim StrTmpVar As String
Dim strProNm As String
Dim strReturn As String
Dim mStrArr() As String
ReDim mStrArr(0)
Set TmpCP = VBInstance.ActiveCodePane
Call TmpCP.GetSelection(iBeginLine, iBeginCol, iEndLine, iEndCol)
For i = iBeginLine To iEndLine
StrTmpVar = Trim(TmpCP.CodeModule.Lines(i, 1))
If StrTmpVar <> vbNullString Then Exit For
Next i
If StrTmpVar = vbNullString Then GoTo WayOut
mStrArr = Split(StrTmpVar, Space(1)) iMax = UBound(mStrArr)
For i = 0 To iMax
If UCase(mStrArr(i)) = "SUB" Or UCase(mStrArr(i)) = "FUNCTION" Then
If UCase(mStrArr(i)) = "SUB" Then
iFlgPro = 1
Else
iFlgPro = 2
strReturn = mStrArr(iMax)
End If
j = InStr(1, mStrArr(i + 1), "(")
If j <> 0 Then
strProNm = Mid(mStrArr(i + 1), 1, j - 1)
End If
End If
Next i
StrTmpVar = "'*******************************************************************************"
StrTmpVar = StrTmpVar & vbCrLf & "'Function Name:"
StrTmpVar = StrTmpVar & vbCrLf & "'" & Space(10) & strProNm
StrTmpVar = StrTmpVar & vbCrLf & "'Function Description:"
StrTmpVar = StrTmpVar & vbCrLf & "'" & Space(10) & "..."
StrTmpVar = StrTmpVar & vbCrLf & "'InPara:"
StrTmpVar = StrTmpVar & vbCrLf & "'"
StrTmpVar = StrTmpVar & vbCrLf & "'"
StrTmpVar = StrTmpVar & vbCrLf & "'OutPara:"
StrTmpVar = StrTmpVar & vbCrLf & "'"
StrTmpVar = StrTmpVar & vbCrLf & "'"
StrTmpVar = StrTmpVar & vbCrLf & "'Return:"
StrTmpVar = StrTmpVar & vbCrLf & "'" & Space(10) & strReturn
StrTmpVar = StrTmpVar & vbCrLf & "'LastUpdate:"
StrTmpVar = StrTmpVar & vbCrLf & "'" & Space(10) & Format(Now, "yyyymmdd") & "/" & GetComputerName() & "(" & GetUserName() & ")"
StrTmpVar = StrTmpVar & vbCrLf & "'*******************************************************************************" Call TmpCP.CodeModule.InsertLines(iBeginLine, StrTmpVar)
Call TmpCP.SetSelection(iBeginLine, 1, iBeginLine + 16, 1)
WayOut:
Set TmpCP = Nothing
End Sub