销售日记 | 管理登陆
****************************************
2018/11/21华东销售额:vba代码备份,记录-周元

vba代码备份

记录-周

课时输入窗体:

Dim d

Private Sub CommandButton1_Click()
    Call 清除当前所在位置的单元格
End Sub


 Private Sub CheckBox1_Change()
   Dim i                    '请假部分(复选框)
   With 课时输入窗体
    For i = 1 To 5
       If .Controls("OptionButton" & i).Value = True Then Exit For
     Next
     If i = 6 Then '初始状态
      .TextBox1 = IIf(.CheckBox1.Value, .CheckBox1.Caption, vbNullString)
     Else
       .TextBox1 = .Controls("OptionButton" & i).Caption & IIf(.CheckBox1.Value, .CheckBox1.Caption, vbNullString)
     End If
   End With
 End Sub

 Private Sub OptionButton1_Click()
   Call CheckBox1_Change
 End Sub

 Private Sub OptionButton2_Click()
   Call CheckBox1_Change
 End Sub

 Private Sub OptionButton3_Click()
   Call CheckBox1_Change
 End Sub

 Private Sub OptionButton4_Click()
   Call CheckBox1_Change
 End Sub

 Private Sub OptionButton5_Click()
   Call CheckBox1_Change
 End Sub


Private Sub 输入到指定行列_Click()
   
    Dim i, j, nL%, nR%
    Dim cKc$, cXm$, xq$, cXq$, Arr()
   
   
    cKc = Me.TextBox1.Value
    xq = ComboBox3.Value
    nR = d(ComboBox1.Value) '根据时间确定写入的行号
    nL = d(xq) '列号
    cXm = ComboBox2.Value
    If cKc = "" Or cXm = "" Or nR = 0 Or nL = 0 Then
        MsgBox ("没有对应数据")
        Exit Sub
    End If
   
    With Sheets("Sheet1")      '写入Sheet2中
        Arr = .Range("a2").Resize(1, nL + 3).Value
        For i = nL To nL + 3
            If Arr(1, i) <> "" Then cXq = Arr(1, i)
           
            If cXq = xq Then
                If .Cells(nR, i).Value = "" Then
                    .Cells(nR, i).Value = cKc & vbCrLf & cXm
                        Cells(nR, i).Select     '读取(单元格显示到屏幕中央?
                    Exit For
                ElseIf .Cells(nR, i).Value = cKc & vbCrLf & cXm Then
                    i = nL + 3
                End If
            End If
        Next
        Cells(nR, i).Select
        If i > nL + 3 Then MsgBox ("已经有数据")
    End With
End Sub


Private Sub 输入到指定行列_3列_Click()
   
    Dim i, j, nL%, nR%
    Dim cKc$, cXm$, xq$, Arr()
   
   
    cKc = Me.TextBox1.Value
    xq = ComboBox3.Value
    nR = d(ComboBox1.Value)
    nL = d(xq)
    cXm = ComboBox2.Value
    If cKc = "" Or cXm = "" Or nR = 0 Or nL = 0 Then
        MsgBox ("没有对应数据")
        Exit Sub
    End If
   
    With Sheets("Sheet2")
        Arr = .Range("a2").Resize(1, nL + 2).Value
        For i = nL To nL + 2
            If Arr(1, i) = xq Or Arr(1, i) = "" Then
                If .Cells(nR, i).Value = "" Then
                    .Cells(nR, i).Value = cKc & vbCrLf & cXm
                        Cells(nR, i).Select     '读取(单元格显示到屏幕中央)
                    Exit For
                ElseIf .Cells(nR, i).Value = cKc & vbCrLf & cXm Then
                    i = nL + 2
                End If
            End If
        Next
        If i > nL + 2 Then MsgBox ("已经有数据")
    End With
End Sub


  Private Sub 输入到指定行列_自己写的_Click()

  Dim i, j
  Myr = Range("A65535").End(3).Row    '逐行读取到最后一行
   For i = 2 To Myr          '文档第2行起,中截止到最后一行
  'For i = 2 To 100          '要注意行数,文档中截止到35行
    If ComboBox1.Value = Cells(i, 1) Then 'And TextBox1.Value = Cells(i, 4) Then
      For j = 2 To 15          'j表示日期的列数,最多31列,从5开始1日
        If ComboBox3.Value = Cells(2, j) Then
          Cells(i, j).Select        '读取(单元格显示到屏幕中央)
          If Len(Cells(i, j)) = 0 Then
          Cells(i, j) = TextBox1.Value & vbCrLf & ComboBox2.Value: GoTo XX        '第一列位置
         
          '[b7] = [b5] & vbCrLf & [b6]
         
          ElseIf Len(Cells(i, j)) > 0 Then MsgBox ("已经有数据")
          ActiveCell.Offset(0, 1).Value = TextBox1.Value & vbCrLf & ComboBox2.Value: GoTo XX   '第2列位置
            Else
          If Len(ActiveCell.Offset(0, 1)) > 0 Then MsgBox ("已经有数据,注意是否周日")  '第3列位置
          ActiveCell.Offset(0, 2).Value = ComboBox2.Value
         
          'MsgBox ("ok")
          GoTo XX
           Exit For
        End If
        End If
        'End If
      Next j
    End If
  Next i
 
  MsgBox ("没有对应数据")
XX:
End Sub



Private Sub UserForm_Initialize()
    Dim Myr&, i&, nL%
    Dim brr, k
   
    Set d = CreateObject("Scripting.Dictionary")
   
        Myr = Range("v65536").End(xlUp).Row     '名字循环
        brr = Range("v3:v" & Myr).Value         '名字循环
    'brr = Sheets("Sheet1").Range("V3:V30").Value
    Me.ComboBox2.List = brr
   
    With Sheets("Sheet1")
        nL = .Range("xfd2").End(xlToLeft).Column
        brr = .Range("a2").Resize(1, nL).Value
        For i = 2 To nL
            If brr(1, i) <> "" Then
                Me.ComboBox3.AddItem brr(1, i)
                d(brr(1, i)) = i
            End If
        Next
   
        Myr = .Range("a65536").End(xlUp).Row
        brr = .Range("a1:a" & Myr).Value
        For i = 3 To Myr
            If brr(i, 1) <> "" Then  '加上这一句防止中间有空值
                d(brr(i, 1)) = i
                Me.ComboBox1.AddItem brr(i, 1)
            End If
        Next

    End With

'    Set d = Nothing

End Sub

****************************************
2018/11/19华东销售额:修脚剩余元
修脚,今天充了100,剩余139
****************************************
2018/11/19华东销售额:Excel窗体工具条控件介绍元

vba窗体工具箱控件介绍

网址:http://www.office68.com/excel/23957.html

****************************************
2018/11/18华东销售额:vba循环自动判断行元
Myr = Range("B65535").End(3).Row    '逐行读取到最后一行
For i = 2 To Myr          '文档B列第2行起,中截止到最后一行
****************************************
2018/11/14华东销售额:解释Cells(Rows.Count, 2).End(3).Row元

解释Cells(Rows.Count, 5).End(3).Row

cells(Rows.count,2)表示B列的最大单元格数,在2003自动即为[B65536],end(3),end属性,3表示XLUP,整个意思为B列所用的最大单元格,如B列用了8行,即cells(Rows.count,2).end(3).Row =8.

****************************************
2018/11/13华东销售额:VBA代码编写中IF、Else判断语句的使用元

VBA代码编写中IF、Else判断语句的使用

网址:https://jingyan.baidu.com/article/fec4bce244ee02f2608d8b11.html

IF(如果)、Else(否则)判断语句

****************************************
2018/11/13华东销售额:vba写入,检查构思元

vba写入,检查构思思路:

单元格相同,跳过,继续,不同(包括没有数据)标注颜色,继续。

****************************************
2018/11/13华东销售额:一个工具,表格拆分、合并、批量处理元

vba一个工具,表格拆分、合并、批量处理

网址:http://club.excelhome.net/thread-1309210-1-1.html


灵活拆分工具

网址:http://club.excelhome.net/thread-1317595-1-1.html

****************************************
2018/11/13华东销售额:vba按列循环元

vba按列循环

For j = 1 To 10     '数据列

For k = 1 To 10     '数据行


jjj和iii也一样


****************************************
2018/11/10华东销售额:vba中的字典用法元

网址:

http://blog.sina.cn/dpool/blog/s/blog_bf035a210102y6yx.html?md=gd



excel编程vba中的字典用法CreateObject("Scripting.Dictionary")

2017-11-09 09:59阅读:2,953
工作中用到vba统计学生成绩,遇到一个需要暂时存储信息的问题。网上搜索解决方法时看到了一个“字典”的对象,感觉很像java编辑中的集合map对象,有键有值成对存储数据。感觉非常有意思。特意搜了一下“字典”的简章说明、用法,记录到这里。即可以以后再用的时候查阅,也可以推广给大家学习。自己的vba知识又多了一点,字典、数组,都用过了。
这是我看到的最简单明了的Excel VBA字典(dictionary)的教程,把字典的应用,用短短几百字,全部道尽,简!但精彩!原文如下:
当年我(原作者:彭希仁)向LDY版主求教字典的时候,他老人家总结了一句话“呼之即来,挥之即去”
即学会d(a)=s 和 s=d(a) 就差不多了,忘记ADD存在。
一、定义字典
Set d = CreateObject('Scripting.Dictionary')
二、呼之即来,挥之即去
d('张三“)=1 '相当于给字典赋值,张三过来(没有就生成)拿个1站一边去
d('李四”)=2 '相当于给字典赋值,李四过来(没有就生成)拿个2站一边去
d('李四”)=3 '相当于改变值,字典中已经有李四了,李四跑过来,丢下2换个3站一边去
注:这时字典中有两个人的存在,张三=1 和 李四=3,相当于实现了去重复的功能
s=d('张三') 's=1 即叫了声张三,张三就告诉你他拿的是1
s=d('李四') 's=3 即叫了声李四,李四就告诉你他拿的是3
s=d('麻子') 's='' 没有找到麻子怎么办呢,字典里就自动生成一个麻子d('麻子') =“”,告诉你他手上是空的
注:这时字典中有三个人的存在,张三=1 ; 李四=3;麻子=“”
三、将字典里的东西变成数组
arr= d.Keys '把名字的集合按先来后到的原则放到一维数组里 arr(0)=“张三” ; arr(1)=“李四” ; arr(2)=“麻子”
arr1=d.Items '把名字对应的值的集合按先来后到的原则放到一维数组里 arr1(0)=“1” ; arr1(1)=“3” ; arr1 (2)=“”
四、查找字典中有没有这个人
s=d.Exists(“张三”) 's=True 有的
s=d.Exists(“http://www.excelba.com”) 's=False 没有
五、清空数组
d.RemoveAll
  共有日记243篇,每页10篇,分14/25页   9首页 3上页 下页4 尾页: