Public Sub 考勤() 生成DLL

Public Sub 考勤()

Dim xlApp As Object
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
'Dim rng As xlApp.range 会产生用户定义类型错误,直接引用range即可。



If Not xlApp.range("c1").Value Like "有效签到" Then '如无指定列,插入空列
xlApp.Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    xlApp.Columns("C:H").Select
    Selection.NumberFormatLocal = "h:mm;@"
'     With Selection
'         .HorizontalAlignment = xlCenter
'         .VerticalAlignment = xlCenter
'         .WrapText = False
'         .Orientation = 0
'         .AddIndent = False
'         .IndentLevel = 0
'         .ShrinkToFit = False
'         .ReadingOrder = xlContext
'         .MergeCells = False
'
'     End With




xlApp.range("c1").Value = "有效签到"
xlApp.range("d1").Value = "签到状态"
xlApp.range("e1").Value = "有效签离"
xlApp.range("f1").Value = "签离状态"
xlApp.range("g1").Value = "工作时长"
xlApp.range("h1").Value = "考勤评测"
End If

For Each rng In Sheet1.xlApp.range("a1:z1") '在首行找到相应的字段所在列值
'If rng = "最早签到时间" Then colu_c = rng.Column
If rng Like "最早签到时间" Then colu_c$ = VBA.Split(rng.Address, "$")(1)
If rng Like "最晚签到时间" Then colu_l$ = VBA.Split(rng.Address, "$")(1)
If rng Like "签到标准" Then colu_cs$ = VBA.Split(rng.Address, "$")(1)
If rng Like "签离标准" Then colu_ls$ = VBA.Split(rng.Address, "$")(1)
If rng Like "出勤状态" Then colu_zk$ = VBA.Split(rng.Address, "$")(1)
Next


'Declare Function kqCopy Lib "c:/windows/kaoqin1.dll" ()
'
'Dim kk As New xlApp.kq365

 
'kq365为VB中类模块名称:输入完New后,敲空格键,直接出现选择列表框,从中选择“kq365”
' kk可任意命名

introw = xlApp.cells(a655536).End(xlUp).Row
'introw = [a655536].End(xlUp).Row
Dim i As Integer
For i = 2 To introw Step 1
tc = xlApp.range(colu_c & i)
tcs = xlApp.range(colu_cs & i)
  tl = xlApp.range(colu_l & i)
  tls = xlApp.range(colu_ls & i)
  zk = xlApp.range(colu_zk & i)

  myarr2 = xlApp.kp365.kq(tcs, tc, tls, tl, zk)
  ' myarr2 = kk.kq(tcs, tc, tls, tl, zk)
  xlApp.range("c" & i).Value = myarr2(0)
  xlApp.range("d" & i).Value = myarr2(1)
  xlApp.range("e" & i).Value = myarr2(2)
  xlApp.range("f" & i).Value = myarr2(3)
  xlApp.range("g" & i).Value = myarr2(4)
  xlApp.range("h" & i).Value = myarr2(5)
  Next
   
   
      xlApp.Columns("C:H").Select
    xlApp.Columns("C:H").EntireColumn.AutoFit
'kq为VB中要执行的模块的名称:输入完kk.后,直接出现选择列表框,从中选择“kq365”
'kq为VB中的过程或函数名称,从列表中选的
  Set kk = Nothing '释放类资源
End Sub

'-----------------------------------------------------

问题集锦:

Q1运行时错误91 对象变量或With块变量未设置

Public <wbr>Sub <wbr>考勤() <wbr> <wbr>生成DLL

目的:为了宏外观简单,便于移植和调用 我用VB将EXCEL中VBA名为attendance的过程(SUB)封装成attend.dll,其子类attend365。回到EXCEL,我建建一个宏,调用attend.dll,代码如下 Sub a()
Dim aa As attend365
aa.考勤
End Sub> 结果如上图。
生成动态链接库(DLL)的过程大致如下: 1. 打开Visual Studio,创建一个新的DLL项目。 2. 在项目中添加所需的代码文件和资源文件。 3. 对代码进行编译和调试,确保没有错误。 4. 在生成选项中选择“生成DLL”。 5. 编译并生成DLL文件。 以下是一个简单的C#代码示例,演示如何动态生成DLL: ```csharp using System; using System.CodeDom.Compiler; using System.Reflection; using Microsoft.CSharp; public class GenerateDLL { public static void Main() { CSharpCodeProvider codeProvider = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateExecutable = false; parameters.OutputAssembly = "MyDLL.dll"; CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, @"public class MyDLLClass { public void MyMethod() { Console.WriteLine(""Hello from MyDLL!""); } }"); if (results.Errors.HasErrors) { Console.WriteLine("Compilation failed."); foreach (CompilerError error in results.Errors) { Console.WriteLine(error.ErrorText); } } else { Assembly assembly = results.CompiledAssembly; Type type = assembly.GetType("MyDLLClass"); object instance = Activator.CreateInstance(type); MethodInfo methodInfo = type.GetMethod("MyMethod"); methodInfo.Invoke(instance, null); } } } ``` 这个示例代码演示了如何使用CSharpCodeProvider类来编译C#代码,并将其生成为一个名为“MyDLL.dll”的动态链接库。然后,程序使用反射来加载并调用DLL中的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值