2012年4月11日 星期三

VB中使MsFlexGrid和MSHFlexGrid控件支持鼠标滚动操作


將這一段程式放到 公共的模組中

Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long

Public Declare Function WaitMessage Lib "user32" () As Long
Public bCancel As Boolean
Public Const WM_MOUSEWHEEL = 522

Public Sub ProcessMessages(sGrid1 As MSFlexGrid)
Dim Message As Msg
       Do While Not bCancel
          'WaitMessage ‘等待消息
          If PeekMessage(Message, sGrid1.hWnd, WM_MOUSEWHEEL, WM_MOUSEWHEEL, PM_REMOVE) Then
              If Message.wParam < 0 Then  ' 向上
                 'Me.Top = Me.Top + 240
                If sGrid1.TopRow < sGrid1.Rows Then
                   sGrid1.TopRow = sGrid1.TopRow + 1
                End If
             Else     '向下??
                If sGrid1.TopRow > 1 Then
                    sGrid1.TopRow = sGrid1.TopRow - 1
                End If
             End If
          End If
          DoEvents
       Loop
End Sub


然後 在每一支程式 的From_load() 加入 此段


'加入此段 即可使用滑鼠滾輪的功能了
    Me.AutoRedraw = True
      Call ProcessMessages(Grid1)




ADO 填入 MSFlexGrid


Title Use ADO to load data into a FlexGrid control
Keywords ADO, database, FlexGrid
Categories Database
 
Open the database and execute the query. Loop through the recordset's Fields array to get the field names and use them as column headers. For each record in the Recordset, loop through the fields saving their values in the FlexGrid.
Keep track of the largest text width in each column and make each column big enough to display the text.
 
Private Sub Form_Load()
Dim db_file As String
Dim statement As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim c As Integer
Dim r As Integer
Dim col_wid() As Single
Dim field_wid As Single

    ' Get the data.
    db_file = App.Path
    If Right$(db_file, 1) <> "\" Then db_file = db_file & _
        "\"
    db_file = db_file & "books.mdb"

    ' Open a connection.
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & db_file & ";" & _
        "Persist Security Info=False"
    conn.Open

    ' Select the data.
    statement = "SELECT * FROM Books ORDER BY Title"

    ' Get the records.
    Set rs = conn.Execute(statement, , adCmdText)

    ' Use one fixed row and no fixed columns.
    MSFlexGrid1.Rows = 2
    MSFlexGrid1.FixedRows = 1
    MSFlexGrid1.FixedCols = 0

    ' Display column headers.
    MSFlexGrid1.Rows = 1
    MSFlexGrid1.Cols = rs.Fields.Count
    ReDim col_wid(0 To rs.Fields.Count - 1)
    For c = 0 To rs.Fields.Count - 1
        MSFlexGrid1.TextMatrix(0, c) = rs.Fields(c).Name
        col_wid(c) = TextWidth(rs.Fields(c).Name)
    Next c

    ' Display the values for each row.
    r = 1
    Do While Not rs.EOF
        MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
        '將資料RS 中的資料取出來 填入 MSFlexGrid 
        For c = 0 To rs.Fields.Count - 1
            MSFlexGrid1.TextMatrix(r, c) = rs.Fields(c).Value

            ' See how big the value is.
            ' 判斷行中 最長的字串 當成最大欄寬
            field_wid = TextWidth(rs.Fields(c).Value)
            If col_wid(c) < field_wid Then col_wid(c) = _
                field_wid
        Next c

        rs.MoveNext
        r = r + 1
    Loop

    ' Close the recordset and connection.
    rs.Close
    conn.Close

    ' Set the column widths.
    For c = 0 To MSFlexGrid1.Cols - 1
        MSFlexGrid1.ColWidth(c) = col_wid(c) + 240
    Next c
End Sub

2012年4月8日 星期日

VB6 MSFlexGrid 元件資料匯至 excel問題


VB6 中 有 MSFlexGrid 元件 內資料在匯出至Excel 是
一般模式都是用迴圈方式(程式碼如下)
    For i = 0 To MSFlexGrid1.Rows - 1
        For jNo = 0 To MSFlexGrid1.Cols - 1
          wshExcel.Cells(i + 1, j + 1) =  MSFlexGrid1.TextMatrix(i, j)
        Next cNo
     Next rNo

請問各位大大,要如何讓 MSFlexGrid可以像listbox元件一樣可以直接貼上
Listbox程式碼如下
    Set MyXlsApp = CreateObject("Excel.Application")
    MyXlsApp.Visible = True
    Set xlbook = MyXlsApp.Workbooks.Add
    Set xlsheet1 = xlbook.Worksheets(1)

    xlsheet1.Cells(1, 1).Value = "產品序號"
    xlsheet1.Cells(1, 2).Value = "功率"
    xlsheet1.Cells(1, 3).Value = "全距"
    xlsheet1.Cells(1, 4).Value = "檢驗時間"
   
    xlsheet1.Range(xlsheet1.Cells(1, 1), xlsheet1.Cells(UserForm1.ListBox1.ListCount, UserForm1.ListBox1.ColumnCount)).Offset(1, 0) = UserForm1.ListBox1.List

例如

xlsheet1.Range(x,y),offset)1,0)=MSFlexGrid1.XXXXXXX

DTPicker 顯示民國日期格式(VB6)

Option Explicit
Private Sub DTPicker1_Format(ByVal CallbackField As String, FormattedString As String)
    If CallbackField = "XXXXXXXXX" Then
       FormattedString = Format(DTPicker1.Year - 1911, "###") + "/" + Format(DTPicker1.Month, "00") + "/" + Format(DTPicker1.Day, "00")
       Text1.Text = FormattedString
    End If
End Sub
Private Sub DTPicker1_FormatSize(ByVal CallbackField As String, Size As Integer)
    If CallbackField = "XXXXXXXXX" Then
       Size = Len(CallbackField)
    End If
End Sub
Private Sub Form_Load()
    DTPicker1.Value = Date
    DTPicker1.CustomFormat = "XXXXXXXXX"
    DTPicker1.Format = dtpCustom
End Sub


要加入  mscomctl.ocx和comctl32.ocx了,

2012年3月27日 星期二

MS SQL 指令、語法與管理


2012年3月26日 星期一

新二代健保上路 6種收入需要多繳費


  • 2011-02-18 
  • 第41期

新二代健保上路 6種收入需要多繳費

  • 文 編輯部 撰文:賴雅淳

攸關你荷包支出的二代健保法已經正式三讀通過,趕快來算一算,你到底要多繳多少健保費?在新制度實施後,又有哪些方法可以合法節省健保費支出?

二代健保過關,有人會增加保費、但也有人可以減少保費。二代健保未來正式實施後,有6 大類收入的民眾,包括兼差族、股票族、利息族、擁有執行業務收入、全年領超過投保薪資4倍獎金的上班族、包租公包租婆等收租一族,可能要繳交兩種健保費。

二代健保所謂的保費共分為兩種,其中一種是目前採用的以經常性投保薪資計算每月健保費,另一種則是補充保險費!

但是如果你只有領一份固定薪水,沒有其他收入來源,那麼所繳的健保費卻會不增反減。精打細算的你,趕快拿出計算機,算一下自己到底是少繳健保費?還是要多繳健保費?

狀況1 只有一份收入的上班族

模擬狀況 林先生、林太太2人的月投保薪資各為4萬100元,且2個小孩都是在林先生的公司加入健保。
扣繳方式 依照原本經常性投保薪資計算保費 費率:由5.17%調降為4.91%(暫定)
計算方式 林家4口每月所繳健保費 
一代健保為:40,100×5.17%×30%×4=2,488元
二代健保為:40,100×4.91%×30%×4=2,364元
林家4口:未來每月可少繳124元,1年少繳1,488元
計算說明 因林先生、林太太以員工身分投保,只需負擔30%健保費,所以在計算上要乘以30%。

狀況2 兼差上班族

模擬狀況 小君白天在貿易公司當會計,每月經常性投保薪資為3萬3300元,晚上則在速食餐廳上大夜班,每月薪水2萬元,那麼每個月要繳多少健保費?
扣繳方式 (1)經常性薪資納保,費率4.91% (2)補充保險費,費率為2%
計算方式 
每月所繳薪資保費為:33,300×4.91%×30%=491元
每月所繳補充保險費為:2萬×2%=400元
小君每個月共要繳:891元健保費
計算說明 目前補充保險費上限為1000萬元,下限未定,因此在試算上是以不扣除下限金額的方式,即總兼差所得的2%來計算補充保險費。

二代健保補充保險費知多少?

定義

二代健保除了以民眾的經常性投保薪資計算健保費之外,還針對經常性薪資以外的所得收取2%的費用做為補充保險費,以擴增健保財源。未來二代健保法公告實施後,健保局主要會針對以下6種經常性薪資以外的收入徵收2%補充保險費。

課徵所得項目

(1)全年所領獎金超過當月投保薪資4倍的獎金。

(2)非屬於投保薪資所給付的薪資所得,也就是兼差的薪資所得。但在職業工會納保的民眾,就算有不同雇主所發給的薪水,也不用繳2%的補充保險費。

(3)擁有執行業務收入,包括律師、會計師、藝人等領取的執行業務所得,另外像是名嘴的演講費、稿費等也算是執行業務收入。但是如果獨立開業的律師、醫師、會計師、建築師,原來就把執行業務所得做為經常性投保金額的話,就不必重複用來計算繳交2%的補充保險費。

(4)股票現金股利所得。

(5)銀行利息所得。

(6)租金收入,只有把房子出租給公司行號等營利單位的的民眾才須繳補充保險費,如果把房子租給學生、上班族等個人使用的話,就不用繳納補充保險費。

徵收上下限

目前補充保險費的上限是1000萬元,也就是超過1000萬元的部分,還是以1000萬元徵收補充保險費。至於下限金額,也就是6種補充保險費收入在一定金額以下,就不用繳補充保險費,由於尚未定案,因此目前的試算都是以不扣除下限,直接以6種收入的2%來概算可能要繳的補充保險費。

扣繳方式

採用單筆就源扣繳方式,例如銀行發放存款利息,上市櫃公司發股票現金股利時,要先扣除其中的2%做為補充保險費交給健保局,剩下的才發給銀行客戶、股東。除了超過4倍投保薪資獎金是以年度累計之外,其他5種收入都是依照單次扣繳補充保險費。例如每一筆的利息、每一筆的兼差收入、每一筆房租都必須扣繳2%當做補充保險費。

罰則

如果扣費義務人,也就是給錢的單位,包括銀行、上市櫃公司、企業,沒有依照規定扣繳補充保險費,健保局會限期補繳,並處以應扣繳金額的1倍當做罰鍰;如果扣費義務人沒有在限期內補繳,就會被處以3倍的罰鍰。

實施日期

預計最快明年正式上路,目前施行細節尚未公布。

◎更多精采內容請看:Money錢NO.41 2011/2

二代健保


中國時報【黃天如、楊毅╱台北報導】
二代健保原訂七月一日上路,因相關準備工作尚未齊備,全民健保監理會與費用協定會昨日決議建議行政院延後實施。對於外界最關心的基本保費費率,衛生署健保小組副召集人曲同光強調,「政府一定會守住低於現行費率五.一七%的承諾。」
馬英九總統曾在「黃金十年」政見中宣示的費率四.九一%承諾恐將跳票?行政院長陳冲昨在立法院答詢時表示,四.九一%這個數字,只是當初在二代健保立法過程中,曾經被提出來作為設算基礎的一個費率,「並不是一個承諾」。
未來將合併的健保監理會與費用協定會,昨召開首度聯繫會議,對衛生署宣示七月一日開辦二代健保,與會委員多認為過於倉促,尤其是應針對未來將開徵補充保費的部分,加強向民眾宣導,最後以舉手投票決議建議行政院延後實施。
曲同光表示,二代健保實施時間,是由衛生署報請行政院核定,對於健保監理會與費協會昨日決議,衛生署會適時向行政院反映,但在拍板定案前,二代健保仍以七月一日上路為目標。但一般認為,二代健保若確定延後上路,配合會計年度的預算編列,最可能的實施期程應該在明年一月一日。
對於外界最關心的基本保費費率,曲同光說,各界「念茲在茲」調降到四.九一%,只是健保局曾經試算過的數字。若真要實施,前提必須是補充保費每年收足兩百億,且不提撥一個月約四百億的安全準備金。
全民監督健保聯盟發言人兼健保監理會委員滕西華則直言,一旦基本保費費率由現行五.一七%調降至四.九一%,健保一年將短收三百卅億元,就算補充保費收足兩百億,也無法填補因此造成的財務缺口。
曲同光也說,衛生署當初保證只要能實施二代健保開徵補充保費,就可調降基本保費,無論如何都會守住這個承諾。